/*
 * @Author: 吴世扬 18368095041@163.com
 * @Date: 2024-07-05 10:33:50
 * @LastEditors: 吴世扬 18368095041@163.com
 * @LastEditTime: 2024-08-22 17:16:24
 * @FilePath: /vue3-uniapp/src/api/my.ts
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
import { un } from '@uni-helper/uni-network';

import type { MyInfoDetail, MyAreaEsListItem } from '@/typings/api/my';

// 切换用户角色
export const updateRole = (id: number) =>
    un
        .get<HttpResult>(`/mini/api/my/role/switch/${id}`)
        .then((res) => res.data);

// 重置密码
export const updatePasswordReset = () =>
    un.post<HttpResult>(`/mini/api/my/password/reset`).then((res) => res.data);

export class MyInfoParam {
    name = ''; // 名称
    avatar?: number; // 头像（文件ID）
    gender: '1' | '2' = '1'; // 性别 1 男 2 女
    contact?: string; // 固定电话
    nation?: string; // 民族
    politicsStatus?: string; // 政治面貌
    education?: string; // 学历
    identityNo?: string; // 身份证号码
    birthday?: string; // 出生日期
    level?: string; // 级别
    position?: string; // 职务
    specialty?: string; // 专业特长
    workDept?: string; // 工作单位
    partyTime?: string; // 入党时间
}
// 用户信息更新
export const updateInfo = (params: MyInfoParam) =>
    un
        .post<HttpResult>(`/mini/api/my/info/update`, params)
        .then((res) => res.data);

export class PasswordParam {
    id?: number; // 用户id
    newPassword = ''; // 新密码，由数字和字母组成，并且要同时含有数字和字母，且长度要在6-16位之间
}
// 修改密码
export const updatePassword = (params: PasswordParam) =>
    un
        .post<HttpResult>(`/mini/api/my/password/change`, params)
        .then((res) => res.data);

// 获取个人信息
export const readMyInfo = () =>
    un
        .get<HttpResult<MyInfoDetail>>(`/mini/api/my/info`)
        .then((res) => res.data);

export class OrderSearchRequestParam
    implements PageParam<keyof MyAreaEsListItem>
{
    current = 1; // 页码
    size = 20; // 页大小
    areaCode?: string; // 我负责的区域编码
    areaLevel?: number; // 我负责的区域层级
    departmentId?: number; // 我负责的部门ID
    departmentStatus?: number; // 部门处理状态：1-待签收 2-处理中 99-已解决
    searchDepartmentIdList?: number[]; // 要查询的部门ID
    searchAreaList?: { areaCode: string; areaLevel: number }[]; // 要查询的区域
    operatorName?: string; // 经办人姓名
    type?: number; // 问题类型，见枚举
    createTimeBegin?: string; // 事件创建时间起
    createTimeEnd?: string; // 事件创建时间止
    title?: string; // 标题
    description?: string; // 问题描述
    content?: string; // 标题和问题描述
    orderCode?: string; // 编号
    status?: number; // 网格处理状态：1-处理中 99-已解决 -1-驳回
    orderType?: number; // 流转类型, 1-提报 2-派发
    sourceType?: number; // 事件来源 见枚举
    appealType?: number; // 诉求类型,1-咨询,2-建议,3-投诉,4-举报,5-求助,6-表扬
    userId?: number; // 当前用户ID
    isRejected?: boolean; // 是否退回
    roleId?: number; // 角色ID
    todoType?: number; // 待办类型, 1-转单申请 2-延期申请 3-退单申请 4-号码申请 5-待处理 6-待签收
    submitterName?: string; // 提报人姓名
    submitterContact?: string; // 提报人手机号")
    draft?: boolean; // 是否草稿
    shortContent?: string; // 内容少于10个字
    timeLimitCode?: number; // 全部时限 1-已经超时 2-即将超时 全部-不传
    remainderDay?: number; // 剩余天数
    waitReceived?: boolean; // 辖区内所有未签收
    personAssigned?: boolean; // 是否指派到个人
    finishTimeBegin?: string; // 事件办结时间起
    finishTimeEnd?: string; // 事件办结时间止
    acceptTimeBegin?: string; // 事件受理时间起
    acceptTimeEnd?: string; // 事件受理时间止
    isWarningEvent?: boolean; // 是否预警事件
    receiveOvertimeCode?: number; // 未按时签收 1-超时签收 2-超时未签收 全部-不传
    standard?: boolean; // 是否规范
    origin?: string; // 来源明细
    dealType?: number; // 主办协办 1-主办 2-协办 不传-全部
    finishAreaLevel?: number; // 办结层级
    finishDeptIdList?: number[]; // 办结部门ID
    satisfyType?: number; // 评价 1-满意 2-不满意 3-待评价 不传-全部
    satisfyFinishStatus?: number; // 是否解决 0-未解决 1-已经解决 2-部分解决 不传-全部
    centralizedType?: number; // 归口类型
    satisfyAppeal?: number; // 评价申诉 0-人工回访 1-申诉中 2-申诉成功 -1-申诉驳回
    satisfyAppealTimeBegin?: string; // 评价申诉时间起
    satisfyAppealTimeEnd?: string; // 评价申诉时间止
    level?: number; // 紧急程度：1-常规 2-重要 3-紧急
}
export const readMyAreaEs = (param: OrderSearchRequestParam) =>
    un
        .post<
            HttpResult<PageResult<MyAreaEsListItem>>
        >(`/mini/api/my/myAreaEs`, param)
        .then((res) => res.data);
